package com.link.base.base.opty.service;

import com.link.base.base.opty.model.ApiOptyExtModel;
import com.link.base.base.opty.model.Opty;
import com.link.core.basic.service.BasicService;

import java.util.List;

/**
 * @author yrf
 * @date unknown
 * @comments 商机操作处理
 */
public interface OptyService extends BasicService<Opty> {

    /**
     * 商机转订单
     * @param o 商机
     * @param randomId
     * @throws Exception
     */
    public void optyGenerateOrder(Opty o, Long randomId) throws Exception;

    /**
     * 商机子模块查询信息时，校验是否能够访问该商机
     * @param optyId 商机id
     * @param security
     * @throws Exception
     */
    public void checkOptyIsAccess(Long optyId, String security) throws Exception;

    /**
     * 商机审核方法
     *
     * @param objectId
     * @param param1
     * @param param2
     * @param param3
     * @param param4
     * @param param5
     * @throws Exception
     */
    public void approvalUpdateOptyStatus(Long objectId, String param1, String param2, String param3, String param4,
                                         String param5) throws Exception;

    /**
     * 查询商机报表
     *
     * @param record record
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> queryOptyReport(Opty record) throws Exception;

    /**
     * 获得商机报表html
     *
     * @param record
     * @return String OptyReportHtml
     * @throws Exception
     */
    public String getOptyReportHtml(Opty record) throws Exception;

    /**
     * 获得商机报表筛选字段：所属组别
     *
     * @param record
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> queryOptyReportOrg(Opty record) throws Exception;

    /**
     * 获得商机报表筛选字段：所属组别(通过值列表获取)
     *
     * @param record
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> queryOptyReportOrgIdByName(Opty record) throws Exception;

    /**
     * <p>根据月份成单率查询商机数据与总金额</p>
     *
     * @author yrf
     * @param record
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> queryCountAndAmountByMonthAndRate(Opty record) throws Exception;

    /**
     * <p>根据赢单率查询下级组织商机各金额 </p>
     *
     * @author yrf
     * @param record
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> queryOrgAmountByRate(Opty record) throws Exception;

    /**
     * <p>商机top10，amount+attr_22</p>
     *
     * @author yrf
     * @param record
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> queryOptyTop10(Opty record) throws Exception;


    /**
     * <p>获取商机列表 </p>
     * @param opty 商机
     * @return List Opty 商机列表
     * @throws Exception
     */
    public List<Opty> getOptyList(Opty opty) throws Exception;

    /**
     * 通过商机id 获取api商机
     * @param optyId 商机id
     * @return
     * @throws Exception
     */
    public ApiOptyExtModel getApiOpty(Long optyId) throws Exception;
}
